package com.panda.ziwei.utils;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class TrueSunTimeUtil {

    private static Map<String, Integer> cityTrueSunTimeMapping = new HashMap<>();

    private static Map<String, Integer> sunLocationMapping = new HashMap<>();

    static {
        cityTrueSunTimeMapping.put("台北", +364);
        cityTrueSunTimeMapping.put("呼和浩特", -2008);
        cityTrueSunTimeMapping.put("包头", -2400);
        cityTrueSunTimeMapping.put("海拉尔", -68);
        cityTrueSunTimeMapping.put("太原", -1788);
        cityTrueSunTimeMapping.put("临汾", -2036);
        cityTrueSunTimeMapping.put("大同", -1628);
        cityTrueSunTimeMapping.put("长治", -1628);
        cityTrueSunTimeMapping.put("石家庄", -1336);
        cityTrueSunTimeMapping.put("唐山", -444);
        cityTrueSunTimeMapping.put("秦皇岛", -92);
        cityTrueSunTimeMapping.put("承德", -512);
        cityTrueSunTimeMapping.put("保定", -1088);
        cityTrueSunTimeMapping.put("张家口", -1220);
        cityTrueSunTimeMapping.put("北京", -848);
        cityTrueSunTimeMapping.put("沈阳", +812);
        cityTrueSunTimeMapping.put("鞍山", +720);
        cityTrueSunTimeMapping.put("锦州", +756);
        cityTrueSunTimeMapping.put("大连", +392);
        cityTrueSunTimeMapping.put("长春", +1272);
        cityTrueSunTimeMapping.put("吉林", +1584);
        cityTrueSunTimeMapping.put("哈尔滨", +1592);
        cityTrueSunTimeMapping.put("牡丹江", +2304);
        cityTrueSunTimeMapping.put("齐齐哈尔", +940);
        cityTrueSunTimeMapping.put("上海", +344);
        cityTrueSunTimeMapping.put("南京", -296);
        cityTrueSunTimeMapping.put("无锡", +72);
        cityTrueSunTimeMapping.put("苏州", +156);
        cityTrueSunTimeMapping.put("徐州", -672);
        cityTrueSunTimeMapping.put("合肥", -656);
        cityTrueSunTimeMapping.put("芜湖", -400);
        cityTrueSunTimeMapping.put("安庆", -712);
        cityTrueSunTimeMapping.put("济南", -712);
        cityTrueSunTimeMapping.put("烟台", +328);
        cityTrueSunTimeMapping.put("青岛", +76);
        cityTrueSunTimeMapping.put("天津", -680);
        cityTrueSunTimeMapping.put("杭州", +40);
        cityTrueSunTimeMapping.put("绍兴", +160);
        cityTrueSunTimeMapping.put("宁波", +376);
        cityTrueSunTimeMapping.put("金华", +44);
        cityTrueSunTimeMapping.put("温州", +152);
        cityTrueSunTimeMapping.put("南昌", -988);
        cityTrueSunTimeMapping.put("九江", -964);
        cityTrueSunTimeMapping.put("赣州", -1216);
        cityTrueSunTimeMapping.put("福州", -164);
        cityTrueSunTimeMapping.put("厦门", -464);
        cityTrueSunTimeMapping.put("泉州", -332);
        cityTrueSunTimeMapping.put("长沙", -1700);
        cityTrueSunTimeMapping.put("湘潭", -1716);
        cityTrueSunTimeMapping.put("常德", -2004);
        cityTrueSunTimeMapping.put("衡阳", -1784);
        cityTrueSunTimeMapping.put("武汉", -1360);
        cityTrueSunTimeMapping.put("监利", -1708);
        cityTrueSunTimeMapping.put("沙市", -1852);
        cityTrueSunTimeMapping.put("宜昌", -2100);
        cityTrueSunTimeMapping.put("郑州", -1512);
        cityTrueSunTimeMapping.put("新乡", -1464);
        cityTrueSunTimeMapping.put("许昌", -1488);
        cityTrueSunTimeMapping.put("洛阳", -1816);
        cityTrueSunTimeMapping.put("开封", -1348);
        cityTrueSunTimeMapping.put("广州", -1608);
        cityTrueSunTimeMapping.put("珠海", -1608);
        cityTrueSunTimeMapping.put("澳门", -1608);
        cityTrueSunTimeMapping.put("韶关", -1548);
        cityTrueSunTimeMapping.put("汕头", -800);
        cityTrueSunTimeMapping.put("深圳", -1548);
        cityTrueSunTimeMapping.put("香港", -1400);
        cityTrueSunTimeMapping.put("海口", -2324);
        cityTrueSunTimeMapping.put("南宁", -2796);
        cityTrueSunTimeMapping.put("桂林", -2360);
        cityTrueSunTimeMapping.put("梧州", -2088);
        cityTrueSunTimeMapping.put("柳州", -2564);
        cityTrueSunTimeMapping.put("贵阳", -3188);
        cityTrueSunTimeMapping.put("遵义", -3148);
        cityTrueSunTimeMapping.put("成都", -4544);
        cityTrueSunTimeMapping.put("重庆", -3228);
        cityTrueSunTimeMapping.put("万县", -2792);
        cityTrueSunTimeMapping.put("内江", -3588);
        cityTrueSunTimeMapping.put("泸州", -3492);
        cityTrueSunTimeMapping.put("昆明", -4152);
        cityTrueSunTimeMapping.put("西安", -2660);
        cityTrueSunTimeMapping.put("延安", -2536);
        cityTrueSunTimeMapping.put("宝鸡", -3084);
        cityTrueSunTimeMapping.put("兰州", -3880);
        cityTrueSunTimeMapping.put("酒泉", -5160);
        cityTrueSunTimeMapping.put("天水", -3468);
        cityTrueSunTimeMapping.put("银川", -3308);
        cityTrueSunTimeMapping.put("西宁", -4364);
        cityTrueSunTimeMapping.put("乌鲁木齐", -7776);
        cityTrueSunTimeMapping.put("克拉玛依", -8436);
        cityTrueSunTimeMapping.put("哈密", -6364);
        cityTrueSunTimeMapping.put("和田", -9620);
        cityTrueSunTimeMapping.put("拉萨", -6952);
        cityTrueSunTimeMapping.put("达孜", -6868);
        cityTrueSunTimeMapping.put("林芝", -6128);
        cityTrueSunTimeMapping.put("曲水", -7024);
        cityTrueSunTimeMapping.put("贡嘎", -6968);
        cityTrueSunTimeMapping.put("林周", -6892);
        cityTrueSunTimeMapping.put("那曲", -6708);

        sunLocationMapping.put("1月1日", -189);
        sunLocationMapping.put("1月2日", -218);
        sunLocationMapping.put("1月3日", -246);
        sunLocationMapping.put("1月4日", -273);
        sunLocationMapping.put("1月5日", -301);
        sunLocationMapping.put("1月6日", -327);
        sunLocationMapping.put("1月7日", -354);
        sunLocationMapping.put("1月8日", -380);
        sunLocationMapping.put("1月9日", -405);
        sunLocationMapping.put("1月10日", -430);
        sunLocationMapping.put("1月11日", -455);
        sunLocationMapping.put("1月12日", -479);
        sunLocationMapping.put("1月13日", -502);
        sunLocationMapping.put("1月14日", -525);
        sunLocationMapping.put("1月15日", -547);
        sunLocationMapping.put("1月16日", -568);
        sunLocationMapping.put("1月17日", -589);
        sunLocationMapping.put("1月18日", -609);
        sunLocationMapping.put("1月19日", -628);
        sunLocationMapping.put("1月20日", -647);
        sunLocationMapping.put("1月21日", -665);
        sunLocationMapping.put("1月22日", -682);
        sunLocationMapping.put("1月23日", -698);
        sunLocationMapping.put("1月24日", -714);
        sunLocationMapping.put("1月25日", -728);
        sunLocationMapping.put("1月26日", -742);
        sunLocationMapping.put("1月27日", -755);
        sunLocationMapping.put("1月28日", -779);
        sunLocationMapping.put("1月29日", -790);
        sunLocationMapping.put("1月30日", -799);
        sunLocationMapping.put("1月31日", -817);
        sunLocationMapping.put("2月1日", -824);
        sunLocationMapping.put("2月2日", -830);
        sunLocationMapping.put("2月3日", -836);
        sunLocationMapping.put("2月4日", -841);
        sunLocationMapping.put("2月5日", -845);
        sunLocationMapping.put("2月6日", -849);
        sunLocationMapping.put("2月7日", -851);
        sunLocationMapping.put("2月8日", -853);
        sunLocationMapping.put("2月9日", -854);
        sunLocationMapping.put("2月10日", -855);
        sunLocationMapping.put("2月11日", -854);
        sunLocationMapping.put("2月12日", -853);
        sunLocationMapping.put("2月13日", -851);
        sunLocationMapping.put("2月14日", -848);
        sunLocationMapping.put("2月15日", -845);
        sunLocationMapping.put("2月16日", -841);
        sunLocationMapping.put("2月17日", -836);
        sunLocationMapping.put("2月18日", -831);
        sunLocationMapping.put("2月19日", -824);
        sunLocationMapping.put("2月20日", -818);
        sunLocationMapping.put("2月21日", -810);
        sunLocationMapping.put("2月22日", -802);
        sunLocationMapping.put("2月23日", -793);
        sunLocationMapping.put("2月24日", -664);
        sunLocationMapping.put("2月25日", -774);
        sunLocationMapping.put("2月26日", -763);
        sunLocationMapping.put("2月27日", -752);
        sunLocationMapping.put("2月28日", -741);
        sunLocationMapping.put("2月29日", -728);
        sunLocationMapping.put("3月1日", -716);
        sunLocationMapping.put("3月2日", -703);
        sunLocationMapping.put("3月3日", -689);
        sunLocationMapping.put("3月4日", -675);
        sunLocationMapping.put("3月5日", -661);
        sunLocationMapping.put("3月6日", -647);
        sunLocationMapping.put("3月7日", -632);
        sunLocationMapping.put("3月8日", -616);
        sunLocationMapping.put("3月9日", -601);
        sunLocationMapping.put("3月10日", -585);
        sunLocationMapping.put("3月11日", -568);
        sunLocationMapping.put("3月12日", -552);
        sunLocationMapping.put("3月13日", -535);
        sunLocationMapping.put("3月14日", -518);
        sunLocationMapping.put("3月15日", -501);
        sunLocationMapping.put("3月16日", -484);
        sunLocationMapping.put("3月17日", -466);
        sunLocationMapping.put("3月18日", -449);
        sunLocationMapping.put("3月19日", -431);
        sunLocationMapping.put("3月20日", -413);
        sunLocationMapping.put("3月21日", -395);
        sunLocationMapping.put("3月22日", -377);
        sunLocationMapping.put("3月23日", -358);
        sunLocationMapping.put("3月24日", -340);
        sunLocationMapping.put("3月25日", -322);
        sunLocationMapping.put("3月26日", -304);
        sunLocationMapping.put("3月27日", -285);
        sunLocationMapping.put("3月28日", -267);
        sunLocationMapping.put("3月29日", -249);
        sunLocationMapping.put("3月30日", -231);
        sunLocationMapping.put("3月31日", -213);
        sunLocationMapping.put("4月1日", -196);
        sunLocationMapping.put("4月2日", -178);
        sunLocationMapping.put("4月3日", -161);
        sunLocationMapping.put("4月4日", -144);
        sunLocationMapping.put("4月5日", -127);
        sunLocationMapping.put("4月6日", -110);
        sunLocationMapping.put("4月7日", -93);
        sunLocationMapping.put("4月8日", -77);
        sunLocationMapping.put("4月9日", -61);
        sunLocationMapping.put("4月10日", 46);
        sunLocationMapping.put("4月11日", 30);
        sunLocationMapping.put("4月12日", 16);
        sunLocationMapping.put("4月13日", 1);
        sunLocationMapping.put("4月14日", 13);
        sunLocationMapping.put("4月15日", 27);
        sunLocationMapping.put("4月16日", 41);
        sunLocationMapping.put("4月17日", 54);
        sunLocationMapping.put("4月18日", 66);
        sunLocationMapping.put("4月19日", 79);
        sunLocationMapping.put("4月20日", 91);
        sunLocationMapping.put("4月21日", 102);
        sunLocationMapping.put("4月22日", 113);
        sunLocationMapping.put("4月23日", 124);
        sunLocationMapping.put("4月24日", 134);
        sunLocationMapping.put("4月25日", 143);
        sunLocationMapping.put("4月26日", 153);
        sunLocationMapping.put("4月27日", 161);
        sunLocationMapping.put("4月28日", 169);
        sunLocationMapping.put("4月29日", 177);
        sunLocationMapping.put("4月30日", 184);
        sunLocationMapping.put("5月1日", 70);
        sunLocationMapping.put("5月2日", 196);
        sunLocationMapping.put("5月3日", 201);
        sunLocationMapping.put("5月4日", 206);
        sunLocationMapping.put("5月5日", 210);
        sunLocationMapping.put("5月6日", 217);
        sunLocationMapping.put("5月7日", 216);
        sunLocationMapping.put("5月8日", 219);
        sunLocationMapping.put("5月9日", 220);
        sunLocationMapping.put("5月10日", 222);
        sunLocationMapping.put("5月11日", 222);
        sunLocationMapping.put("5月12日", 222);
        sunLocationMapping.put("5月13日", 222);
        sunLocationMapping.put("5月14日", 221);
        sunLocationMapping.put("5月15日", 219);
        sunLocationMapping.put("5月16日", 217);
        sunLocationMapping.put("5月17日", 214);
        sunLocationMapping.put("5月18日", 211);
        sunLocationMapping.put("5月19日", 207);
        sunLocationMapping.put("5月20日", 203);
        sunLocationMapping.put("5月21日", 198);
        sunLocationMapping.put("5月22日", 193);
        sunLocationMapping.put("5月23日", 187);
        sunLocationMapping.put("5月24日", 181);
        sunLocationMapping.put("5月25日", 174);
        sunLocationMapping.put("5月26日", 167);
        sunLocationMapping.put("5月27日", 159);
        sunLocationMapping.put("5月28日", 151);
        sunLocationMapping.put("5月29日", 142);
        sunLocationMapping.put("5月30日", 133);
        sunLocationMapping.put("5月31日", 124);
        sunLocationMapping.put("6月1日", 114);
        sunLocationMapping.put("6月2日", 104);
        sunLocationMapping.put("6月3日", 94);
        sunLocationMapping.put("6月4日", 83);
        sunLocationMapping.put("6月5日", 72);
        sunLocationMapping.put("6月6日", 60);
        sunLocationMapping.put("6月7日", 48);
        sunLocationMapping.put("6月8日", 36);
        sunLocationMapping.put("6月9日", 24);
        sunLocationMapping.put("6月10日", 12);
        sunLocationMapping.put("6月11日", 1);
        sunLocationMapping.put("6月12日", 14);
        sunLocationMapping.put("6月13日", 39);
        sunLocationMapping.put("6月14日", 52);
        sunLocationMapping.put("6月15日", -65);
        sunLocationMapping.put("6月16日", -78);
        sunLocationMapping.put("6月17日", -91);
        sunLocationMapping.put("6月18日", -105);
        sunLocationMapping.put("6月19日", -117);
        sunLocationMapping.put("6月20日", -130);
        sunLocationMapping.put("6月21日", -143);
        sunLocationMapping.put("6月22日", -156);
        sunLocationMapping.put("6月23日", -168);
        sunLocationMapping.put("6月24日", -181);
        sunLocationMapping.put("6月25日", -193);
        sunLocationMapping.put("6月26日", -205);
        sunLocationMapping.put("6月27日", -217);
        sunLocationMapping.put("6月28日", -229);
        sunLocationMapping.put("6月29日", -240);
        sunLocationMapping.put("6月30日", -251);
        sunLocationMapping.put("7月1日", -262);
        sunLocationMapping.put("7月2日", -273);
        sunLocationMapping.put("7月3日", -283);
        sunLocationMapping.put("7月4日", -293);
        sunLocationMapping.put("7月5日", -302);
        sunLocationMapping.put("7月6日", -311);
        sunLocationMapping.put("7月7日", -320);
        sunLocationMapping.put("7月8日", -328);
        sunLocationMapping.put("7月9日", -336);
        sunLocationMapping.put("7月10日", -343);
        sunLocationMapping.put("7月11日", -350);
        sunLocationMapping.put("7月12日", -356);
        sunLocationMapping.put("7月13日", -362);
        sunLocationMapping.put("7月14日", -368);
        sunLocationMapping.put("7月15日", -372);
        sunLocationMapping.put("7月16日", -376);
        sunLocationMapping.put("7月17日", -380);
        sunLocationMapping.put("7月18日", -383);
        sunLocationMapping.put("7月19日", -385);
        sunLocationMapping.put("7月20日", -387);
        sunLocationMapping.put("7月21日", -389);
        sunLocationMapping.put("7月22日", -389);
        sunLocationMapping.put("7月23日", -389);
        sunLocationMapping.put("7月24日", -389);
        sunLocationMapping.put("7月25日", -388);
        sunLocationMapping.put("7月26日", -386);
        sunLocationMapping.put("7月27日", -384);
        sunLocationMapping.put("7月28日", -381);
        sunLocationMapping.put("7月29日", -377);
        sunLocationMapping.put("7月30日", -373);
        sunLocationMapping.put("7月31日", -368);
        sunLocationMapping.put("8月1日", -363);
        sunLocationMapping.put("8月2日", -357);
        sunLocationMapping.put("8月3日", -351);
        sunLocationMapping.put("8月4日", -344);
        sunLocationMapping.put("8月5日", -336);
        sunLocationMapping.put("8月6日", -328);
        sunLocationMapping.put("8月7日", -319);
        sunLocationMapping.put("8月8日", -310);
        sunLocationMapping.put("8月9日", -300);
        sunLocationMapping.put("8月10日", -290);
        sunLocationMapping.put("8月11日", -279);
        sunLocationMapping.put("8月12日", -267);
        sunLocationMapping.put("8月13日", -255);
        sunLocationMapping.put("8月14日", -242);
        sunLocationMapping.put("8月15日", -229);
        sunLocationMapping.put("8月16日", -216);
        sunLocationMapping.put("8月17日", -201);
        sunLocationMapping.put("8月18日", -187);
        sunLocationMapping.put("8月19日", -171);
        sunLocationMapping.put("8月20日", -156);
        sunLocationMapping.put("8月21日", -140);
        sunLocationMapping.put("8月22日", -123);
        sunLocationMapping.put("8月23日", -107);
        sunLocationMapping.put("8月24日", -89);
        sunLocationMapping.put("8月25日", -72);
        sunLocationMapping.put("8月26日", 54);
        sunLocationMapping.put("8月27日", 35);
        sunLocationMapping.put("8月28日", 17);
        sunLocationMapping.put("8月29日", 2);
        sunLocationMapping.put("8月30日", 21);
        sunLocationMapping.put("8月31日", 41);
        sunLocationMapping.put("9月1日", 60);
        sunLocationMapping.put("9月2日", 80);
        sunLocationMapping.put("9月3日", 100);
        sunLocationMapping.put("9月4日", 121);
        sunLocationMapping.put("9月5日", 141);
        sunLocationMapping.put("9月6日", 162);
        sunLocationMapping.put("9月7日", 183);
        sunLocationMapping.put("9月8日", 183);
        sunLocationMapping.put("9月9日", 204);
        sunLocationMapping.put("9月10日", 225);
        sunLocationMapping.put("9月11日", 246);
        sunLocationMapping.put("9月12日", 267);
        sunLocationMapping.put("9月13日", 288);
        sunLocationMapping.put("9月14日", 310);
        sunLocationMapping.put("9月15日", 331);
        sunLocationMapping.put("9月16日", 353);
        sunLocationMapping.put("9月17日", 374);
        sunLocationMapping.put("9月18日", 395);
        sunLocationMapping.put("9月19日", 417);
        sunLocationMapping.put("9月20日", 438);
        sunLocationMapping.put("9月21日", 459);
        sunLocationMapping.put("9月22日", 480);
        sunLocationMapping.put("9月23日", 501);
        sunLocationMapping.put("9月24日", 522);
        sunLocationMapping.put("9月25日", 542);
        sunLocationMapping.put("9月26日", 562);
        sunLocationMapping.put("9月27日", 582);
        sunLocationMapping.put("9月28日", 602);
        sunLocationMapping.put("9月29日", 621);
        sunLocationMapping.put("9月30日", 640);
        sunLocationMapping.put("10月1日", 659);
        sunLocationMapping.put("10月2日", 678);
        sunLocationMapping.put("10月3日", 696);
        sunLocationMapping.put("10月4日", 696);
        sunLocationMapping.put("10月5日", 713);
        sunLocationMapping.put("10月6日", 731);
        sunLocationMapping.put("10月7日", 748);
        sunLocationMapping.put("10月8日", 764);
        sunLocationMapping.put("10月9日", 780);
        sunLocationMapping.put("10月10日", 796);
        sunLocationMapping.put("10月11日", 796);
        sunLocationMapping.put("10月12日", 811);
        sunLocationMapping.put("10月13日", 825);
        sunLocationMapping.put("10月14日", 839);
        sunLocationMapping.put("10月15日", 853);
        sunLocationMapping.put("10月16日", 866);
        sunLocationMapping.put("10月17日", 878);
        sunLocationMapping.put("10月18日", 890);
        sunLocationMapping.put("10月19日", 901);
        sunLocationMapping.put("10月20日", 912);
        sunLocationMapping.put("10月21日", 921);
        sunLocationMapping.put("10月22日", 931);
        sunLocationMapping.put("10月23日", 940);
        sunLocationMapping.put("10月24日", 948);
        sunLocationMapping.put("10月25日", 955);
        sunLocationMapping.put("10月26日", 961);
        sunLocationMapping.put("10月27日", 967);
        sunLocationMapping.put("10月28日", 972);
        sunLocationMapping.put("10月29日", 976);
        sunLocationMapping.put("10月30日", 980);
        sunLocationMapping.put("10月31日", 982);
        sunLocationMapping.put("11月1日", 984);
        sunLocationMapping.put("11月2日", 985);
        sunLocationMapping.put("11月3日", 985);
        sunLocationMapping.put("11月4日", 984);
        sunLocationMapping.put("11月5日", 983);
        sunLocationMapping.put("11月6日", 981);
        sunLocationMapping.put("11月7日", 977);
        sunLocationMapping.put("11月8日", 973);
        sunLocationMapping.put("11月9日", 969);
        sunLocationMapping.put("11月10日", 963);
        sunLocationMapping.put("11月11日", 956);
        sunLocationMapping.put("11月12日", 949);
        sunLocationMapping.put("11月13日", 941);
        sunLocationMapping.put("11月14日", 932);
        sunLocationMapping.put("11月15日", 922);
        sunLocationMapping.put("11月16日", 911);
        sunLocationMapping.put("11月17日", 900);
        sunLocationMapping.put("11月18日", 887);
        sunLocationMapping.put("11月19日", 874);
        sunLocationMapping.put("11月20日", 860);
        sunLocationMapping.put("11月21日", 846);
        sunLocationMapping.put("11月22日", 830);
        sunLocationMapping.put("11月23日", 814);
        sunLocationMapping.put("11月24日", 797);
        sunLocationMapping.put("11月25日", 779);
        sunLocationMapping.put("11月26日", 760);
        sunLocationMapping.put("11月27日", 741);
        sunLocationMapping.put("11月28日", 721);
        sunLocationMapping.put("11月29日", 700);
        sunLocationMapping.put("11月30日", 678);
        sunLocationMapping.put("12月1日", 656);
        sunLocationMapping.put("12月2日", 633);
        sunLocationMapping.put("12月3日", 609);
        sunLocationMapping.put("12月4日", 585);
        sunLocationMapping.put("12月5日", 561);
        sunLocationMapping.put("12月6日", 535);
        sunLocationMapping.put("12月7日", 509);
        sunLocationMapping.put("12月8日", 483);
        sunLocationMapping.put("12月9日", 456);
        sunLocationMapping.put("12月10日", 429);
        sunLocationMapping.put("12月11日", 402);
        sunLocationMapping.put("12月12日", 374);
        sunLocationMapping.put("12月13日", 346);
        sunLocationMapping.put("12月14日", 317);
        sunLocationMapping.put("12月15日", 288);
        sunLocationMapping.put("12月16日", 259);
        sunLocationMapping.put("12月17日", 230);
        sunLocationMapping.put("12月18日", 201);
        sunLocationMapping.put("12月19日", 171);
        sunLocationMapping.put("12月20日", 142);
        sunLocationMapping.put("12月21日", 112);
        sunLocationMapping.put("12月22日", 82);
        sunLocationMapping.put("12月23日", 52);
        sunLocationMapping.put("12月24日", 23);
        sunLocationMapping.put("12月25日", 7);
        sunLocationMapping.put("12月26日", 37);
        sunLocationMapping.put("12月27日", -66);
        sunLocationMapping.put("12月28日", -96);
        sunLocationMapping.put("12月29日", -125);
        sunLocationMapping.put("12月30日", -154);
        sunLocationMapping.put("12月31日", -183);

    }

    public static Date computeTrueSunTime(String city, Date date) {
        long time = date.getTime();
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(time);
        int delta = cityTrueSunTimeMapping.get(city);
        String key = (calendar.get(Calendar.MONTH) + 1) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日";
        int beta = sunLocationMapping.get(key);
        long trueSunTime = time + delta * 1000 + beta * 1000;
        return new Date(trueSunTime);
    }
    

//    public static void main(String[] args) {
////        String city = "哈尔滨";
////        Calendar calendar = Calendar.getInstance();
////        calendar.set(1993, 3, 1, 8, 30, 0);
////        Date date = new Date(calendar.getTimeInMillis());
////        System.out.println(computeTrueSunTime(city, date));
//
//        for (String s : ss) {
//            if ("".equals(s)) {
//                continue;
//            }
//            String p1 = s.split("日")[0].trim();
//            String p2 = s.split("日")[1].trim();
//            int mon = Integer.parseInt(p1.split("月")[0]);
//            int day = Integer.parseInt(p1.split("月")[1]);
//            int min = Integer.parseInt(p2.split("分")[0].trim());
//            int sec = Integer.parseInt(p2.split("分")[1].trim().split("秒")[0].trim());
//            System.out.println("sunLocationMapping.put(\"" + mon + "月" + day + "日" + "\", " + (min * 60 + (min < 0 ? -1 * sec : sec)) + ");");
//        }
//    }

    //台北 121度31分 +6分04秒
    //呼和浩特 111度38分 -33分28秒
    //包头 110度00分 -40分00秒
    //海拉尔 119度43分 -1分08秒
    //太原 112度33分 -29分48秒
    //临汾 111度31分 -33分56秒
    //大同 113度13分 -27分08秒
    //长治 113度13分 -27分08秒
    //石家庄 114度26分 -22分16秒
    //唐山 118度09分 -7分24秒
    //秦皇岛 119度37分 -1分32秒
    //承德 117度52分 -8分32秒
    //保定 115度28分 -18分08秒
    //张家口 114度55分 -20分20秒
    //北京 116度28分 -14分08秒
    //沈阳 123度23分 +13分32秒
    //鞍山 123度00分 +12分00秒
    //锦州 123度09分 +12分36秒
    //大连 121度38分 +6分32秒
    //长春 125度18分 +21分12秒
    //吉林 126度36分 +26分24秒
    //哈尔滨 126度38分 +26分32秒
    //牡丹江 129度36分 +38分24秒
    //齐齐哈尔 123度55分 +15分40秒
    //上海 121度26分 +5分44秒
    //南京 118度46分 -4分56秒
    //无锡 120度18分 +1分12秒
    //苏州 120度39分 +2分36秒
    //徐州 117度12分 -11分12秒
    //合肥 117度16分 -10分56秒
    //芜湖 118度20分 -6分40秒
    //安庆 117度02分 -11分52秒
    //济南 117度02分 -11分52秒
    //烟台 121度22分 +5分28秒
    //青岛 120度19分 +1分16秒
    //天津 117度10分 -11分20秒
    //杭州 120度10分 +0分40秒
    //绍兴 120度40分 +2分40秒
    //宁波 121度34分 +6分16秒
    //金华 119度49分 +0分44秒
    //温州 120度38分 +2分32秒
    //南昌 115度53分 -16分28秒
    //九江 115度59分 -16分04秒
    //赣州 114度56分 -20分16秒
    //福州 119度19分 -2分44秒
    //厦门 118度04分 -7分44秒
    //泉州 118度37分 -5分32秒
    //长沙 112度55分 -28分20秒
    //湘潭 112度51分 -28分36秒
    //常德 111度39分 -33分24秒
    //衡阳 112度34分 -29分44秒
    //武汉 114度20分 -22分40秒
    //监利 112度53分 -28分28秒
    //沙市 112度17分 -30分52秒
    //宜昌 111度15分 -35分00秒
    //郑州 113度42分 -25分12秒
    //新乡 113度54分 -24分24秒
    //许昌 113度48分 -24分48秒
    //洛阳 112度26分 -30分16秒
    //开封 114度23分 -22分28秒
    //广州 113度18分 -26分48秒
    //珠海 113度18分 -26分48秒
    //澳门 113度18分 -26分48秒
    //韶关 113度33分 -25分48秒
    //汕头 116度40分 -13分20秒
    //深圳 113度33分 -25分48秒
    //香港 114度10分 -23分20秒
    //海口 110度19分 -38分44秒
    //南宁 108度21分 -46分36秒
    //桂林 110度10分 -39分20秒
    //梧州 111度18分 -34分48秒
    //柳州 109度19分 -42分44秒
    //贵阳 106度43分 -53分08秒
    //遵义 106度53分 -52分28秒
    //成都 101度04分 -75分44秒
    //重庆 106度33分 -53分48秒
    //万县 108度22分 -46分32秒
    //内江 105度03分 -59分48秒
    //泸州 105度27分 -58分12秒
    //昆明 102度42分 -69分12秒
    //西安 108度55分 -44分20秒
    //延安 109度26分 -42分16秒
    //宝鸡 107度09分 -51分24秒
    //兰州 103度50分 -64分40秒
    //酒泉 98度30分 -86分00秒
    //天水 105度33分 -57分48秒
    //银川 106度13分 -55分08秒
    //西宁 101度49分 -72分44秒
    //乌鲁木齐 87度36分 -129分36秒
    //克拉玛依 84度51分 -140分36秒
    //哈密 93度29分 -106分04秒
    //和田 79度55分 -160分20秒
    //拉萨 91度02分 -115分52秒
    //达孜 91度23分 -114分28秒
    //林芝 94度28分 -102分08秒
    //曲水 90度44分 -117分04秒
    //贡嘎 90度58分 -116分08秒
    //林周 91度17分 -114分52秒
    //那曲 92度03分 -111分48秒


    //1月01日-3分9秒
    //
    //1月02日-3分38秒
    //
    //1月03日-4分6秒
    //
    //1月04日-4分33秒
    //
    //1月05日-5分1秒
    //
    //1月06日-5分27秒
    //
    //1月07日-5分54秒
    //
    //1月08日-6分20秒
    //
    //1月09日-6分45秒
    //
    //1月10日-7分10秒
    //
    //1月11日-7分35秒
    //
    //1月12日-7分59秒
    //
    //1月13日-8分22秒
    //
    //1月14日-8分45秒
    //
    //1月15日-9分7秒
    //
    //1月16日-9分28秒
    //
    //1月17日-9分49秒
    //
    //1月18日-10分9秒
    //
    //1月19日-10分28秒
    //
    //1月20日-10分47秒
    //
    //1月21日-11分5秒
    //
    //1月22日-11分22秒
    //
    //1月23日-11分38秒
    //
    //1月24日-11分54秒
    //
    //1月25日-12分8秒
    //
    //1月26日-12分22秒
    //
    //1月27日-12分35秒
    //
    //1月28日-12分59秒
    //
    //1月29日-13分10秒
    //
    //1月30日-13分19秒
    //
    //1月31日-13分37秒
    //
    //2月01日-13分44秒
    //
    //2月02日-13分50秒
    //
    //2月03日-13分56秒
    //
    //2月04日-14分1秒
    //
    //2月05日-14分5秒
    //
    //2月06日-14分9秒
    //
    //2月07日-14分11秒
    //
    //2月08日-14分13秒
    //
    //2月09日-14分14秒
    //
    //2月10日-14分15秒
    //
    //2月11日-14分14秒
    //
    //2月12日-14分13秒
    //
    //2月13日-14分11秒
    //
    //2月14日-14分8秒
    //
    //2月15日-14分5秒
    //
    //2月16日-14分1秒
    //
    //2月17日-13分56秒
    //
    //2月18日-13分51秒
    //
    //2月19日-13分44秒
    //
    //2月20日-13分38秒
    //
    //2月21日-13分30秒
    //
    //2月22日-13分22秒
    //
    //2月23日-13分13秒
    //
    //2月24日-11分4秒
    //
    //2月25日-12分54秒
    //
    //2月26日-12分43秒
    //
    //2月27日-12分32秒
    //
    //2月28日-12分21秒
    //
    //2月29日-12分8秒
    //
    //3月01日-11分56秒
    //
    //3月02日-11分43秒
    //
    //3月03日-11分29秒
    //
    //3月04日-11分15秒
    //
    //3月05日-11分1秒
    //
    //3月06日-10分47秒
    //
    //3月07日-10分32秒
    //
    //3月08日-10分16秒
    //
    //3月09日-10分1秒
    //
    //3月10日-9分45秒
    //
    //3月11日-9分28秒
    //
    //3月12日-9分12秒
    //
    //3月13日-8分55秒
    //
    //3月14日-8分38秒
    //
    //3月15日-8分21秒
    //
    //3月16日-8分4秒
    //
    //3月17日-7分46秒
    //
    //3月18日-7分29秒
    //
    //3月19日-7分11秒
    //
    //3月20日-6分53秒
    //
    //3月21日-6分35秒
    //
    //3月22日-6分17秒
    //
    //3月23日-5分58秒
    //
    //3月24日-5分40秒
    //
    //3月25日-5分22秒
    //
    //3月26日-5分4秒
    //
    //3月27日-4分45秒
    //
    //3月28日-4分27秒
    //
    //3月29日-4分9秒
    //
    //3月30日-3分51秒
    //
    //3月31日-3分33秒
    //
    //4月01日-3分16秒
    //
    //4月02日-2分58秒
    //
    //4月03日-2分41秒
    //
    //4月04日-2分24秒
    //
    //4月05日-2分7秒
    //
    //4月06日-1分50秒
    //
    //4月07日-1分33秒
    //
    //4月08日-1分17秒
    //
    //4月09日-1分1秒
    //
    //4月10日 0分46秒
    //
    //4月11日 0分30秒
    //
    //4月12日 0分16秒
    //
    //4月13日 0分1秒
    //
    //4月14日 0分13秒
    //
    //4月15日 0分27秒
    //
    //4月16日 0分41秒
    //
    //4月17日 0分54秒
    //
    //4月18日 1分6秒
    //
    //4月19日 1分19秒
    //
    //4月20日 1分31秒
    //
    //4月21日 1分42秒
    //
    //4月22日 1分53秒
    //
    //4月23日 2分4秒
    //
    //4月24日 2分14秒
    //
    //4月25日 2分23秒
    //
    //4月26日 2分33秒
    //
    //4月27日 2分41秒
    //
    //4月28日 2分49秒
    //
    //4月29日 2分57秒
    //
    //4月30日 3分4秒
    //
    //
    //5月01日 1分10秒
    //5月02日 3分16秒
    //5月03日 3分21秒
    //5月04日 3分26秒
    //5月05日 3分30秒
    //5月06日 3分37秒
    //5月07日 3分36秒
    //5月08日 3分39秒
    //5月09日 3分40秒
    //5月10日 3分42秒
    //5月11日 3分42秒
    //5月12日 3分42秒
    //5月13日 3分42秒
    //5月14日 3分41秒
    //5月15日 3分39秒
    //5月16日 3分37秒
    //5月17日 3分34秒
    //5月18日 3分31秒
    //5月19日 3分27秒
    //5月20日 3分23秒
    //5月21日 3分18秒
    //5月22日 3分13秒
    //5月23日 3分7秒
    //5月24日 3分1秒
    //5月25日 2分54秒
    //5月26日 2分47秒
    //5月27日 2分39秒
    //5月28日 2分31秒
    //5月29日 2分22秒
    //5月30日 2分13秒
    //5月31日 2分4秒
    //6月01日 1分54秒
    //6月02日 1分44秒
    //6月03日 1分34秒
    //6月04日 1分23秒
    //6月05日 1分12秒
    //6月06日 1分0秒
    //6月07日 0分48秒
    //6月08日 0分36秒
    //6月09日 0分24秒
    //6月10日 0分12秒
    //6月11日 0分1秒
    //6月12日 0分14秒
    //6月13日 0分39秒
    //6月14日 0分52秒
    //6月15日-1分5秒
    //6月16日-1分18秒
    //6月17日-1分31秒
    //6月18日-1分45秒
    //6月19日-1分57秒
    //6月20日-2分10秒
    //6月21日-2分23秒
    //6月22日-2分36秒
    //6月23日-2分48秒
    //6月24日-3分1秒
    //6月25日-3分13秒
    //6月26日-3分25秒
    //6月27日-3分37秒
    //6月28日-3分49秒
    //6月29日-4分0秒
    //6月30日-4分11秒
    //7月01日-4分22秒
    //7月02日-4分33秒
    //7月03日-4分43秒
    //7月04日-4分53秒
    //7月05日-5分2秒
    //7月06日-5分11秒
    //7月07日-5分20秒
    //7月08日-5分28秒
    //7月09日-5分36秒
    //7月10日-5分43秒
    //7月11日-5分50秒
    //7月12日-5分56秒
    //7月13日-6分2秒
    //7月14日-6分8秒
    //7月15日-6分12秒
    //7月16日-6分16秒
    //7月17日-6分20秒
    //7月18日-6分23秒
    //7月19日-6分25秒
    //7月20日-6分27秒
    //7月21日-6分29秒
    //7月22日-6分29秒
    //7月23日-6分29秒
    //7月24日-6分29秒
    //7月25日-6分28秒
    //7月26日-6分26秒
    //7月27日-6分24秒
    //7月28日-6分21秒
    //7月29日-6分17秒
    //7月30日-6分13秒
    //7月31日-6分8秒
    //8月01日-6分3秒
    //8月02日-5分57秒
    //8月03日-5分51秒
    //8月04日-5分44秒
    //8月05日-5分36秒
    //8月06日-5分28秒
    //8月07日-5分19秒
    //8月08日-5分10秒
    //8月09日-5分0秒
    //8月10日-4分50秒
    //8月11日-4分39秒
    //8月12日-4分27秒
    //8月13日-4分15秒
    //8月14日-4分2秒
    //8月15日-3分49秒
    //8月16日-3分36秒
    //8月17日-3分21秒
    //8月18日-3分7秒
    //8月19日-2分51秒
    //8月20日-2分36秒
    //8月21日-2分20秒
    //8月22日-2分3秒
    //8月23日-1分47秒
    //8月24日-1分29秒
    //8月25日-1分12秒
    //8月26日 0分54秒
    //8月27日 0分35秒
    //8月28日 0分17秒
    //8月29日 0分2秒
    //8月30日 0分21秒
    //8月31日 0分41秒
    //9月01日 1分0秒
    //9月02日 1分20秒
    //9月03日 1分40秒
    //9月04日 2分1秒
    //9月05日 2分21秒
    //9月06日 2分42秒
    //9月07日 3分3秒
    //9月08日 3分3秒
    //9月09日 3分24秒
    //9月10日 3分45秒
    //9月11日 4分6秒
    //9月12日 4分27秒
    //9月13日 4分48秒
    //9月14日 5分10秒
    //9月15日 5分31秒
    //9月16日 5分53秒
    //9月17日 6分14秒
    //9月18日 6分35秒
    //9月19日 6分57秒
    //9月20日 7分18秒
    //9月21日 7分39秒
    //9月22日 8分0秒
    //9月23日 8分21秒
    //9月24日 8分42秒
    //9月25日 9分2秒
    //9月26日 9分22秒
    //9月27日 9分42秒
    //9月28日 10分2秒
    //9月29日 10分21秒
    //9月30日 10分40秒
    //10月01日 10分59秒
    //10月02日 11分18秒
    //10月03日 11分36秒
    //10月04日 11分36秒
    //10月05日 11分53秒
    //10月06日 12分11秒
    //10月07日 12分28秒
    //10月08日 12分44秒
    //10月09日 12分60秒
    //10月10日 13分16秒
    //10月11日 13分16秒
    //10月12日 13分31秒
    //10月13日 13分45秒
    //10月14日 13分59秒
    //10月15日 14分13秒
    //10月16日 14分26秒
    //10月17日 14分38秒
    //10月18日 14分50秒
    //10月19日 15分1秒
    //10月20日 15分12秒
    //10月21日 15分21秒
    //10月22日 15分31秒
    //10月23日 15分40秒
    //10月24日 15分48秒
    //10月25日 15分55秒
    //10月26日 16分1秒
    //10月27日 16分7秒
    //10月28日 16分12秒
    //10月29日 16分16秒
    //10月30日 16分20秒
    //10月31日 16分22秒
    //11月01日 16分24秒
    //11月02日 16分25秒
    //11月03日 16分25秒
    //11月04日 16分24秒
    //11月05日 16分23秒
    //11月06日 16分21秒
    //11月07日 16分17秒
    //11月08日 16分13秒
    //11月09日 16分9秒
    //11月10日 16分3秒
    //11月11日 15分56秒
    //11月12日 15分49秒
    //11月13日 15分41秒
    //11月14日 15分32秒
    //11月15日 15分22秒
    //11月16日 15分11秒
    //11月17日 14分60秒
    //11月18日 14分47秒
    //11月19日 14分34秒
    //11月20日 14分20秒
    //11月21日 14分6秒
    //11月22日 13分50秒
    //11月23日 13分34秒
    //11月24日 13分17秒
    //11月25日 12分59秒
    //11月26日 12分40秒
    //11月27日 12分21秒
    //11月28日 12分1秒
    //11月29日 11分40秒
    //11月30日 11分18秒
    //12月01日 10分56秒
    //12月02日 10分33秒
    //12月03日 10分9秒
    //12月04日 9分45秒
    //12月05日 9分21秒
    //12月06日 8分55秒
    //12月07日 8分29秒
    //12月08日 8分3秒
    //12月09日 7分36秒
    //12月10日 7分9秒
    //12月11日 6分42秒
    //12月12日 6分14秒
    //12月13日 5分46秒
    //12月14日 5分17秒
    //12月15日 4分48秒
    //12月16日 4分19秒
    //12月17日 3分50秒
    //12月18日 3分21秒
    //12月19日 2分51秒
    //12月20日 2分22秒
    //12月21日 1分52秒
    //12月22日 1分22秒
    //12月23日 0分52秒
    //12月24日 0分23秒
    //12月25日 0分7秒
    //12月26日 0分37秒
    //12月27日-1分6秒
    //12月28日-1分36秒
    //12月29日-2分5秒
    //12月30日-2分34秒
    //12月31日-3分3秒
}
